package com.hu.hrm.web.controller;

import com.hu.hrm.util.AjaxResult;
import com.hu.hrm.util.FastDfsApiOpr;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/*
* 文件统一处理
* */
@RestController
@RequestMapping("/fastdfs")
public class FastdfsController {

    /*
    * 文件下载
    *  传入的：     path:     /group1/M00/00/02/dhma1l5XFxaAfbETAACBNnahKck769.zip
    *
    *   由于调用的工具方法中 FastDfsApiOpr.download 返回的是 byte[]  所以不像之前那样返回而是返回byte[]
    *
    * */
    //  /group1/M00/00/01/wKgLb15RsNWAHucaAACBNnMr71A671.zip
    @PostMapping("/download")
    public byte[] download(@RequestParam("path")String path){
        try {
            /*
            * 准备下载方法需要的参数
            * */
            //1.去掉最前面的 “/” 得到结果 group1/M00/00/01/wKgLb15RsNWAHucaAACBNnMr71A671.zip
            path = path.startsWith("/") ?   path.substring(1) : path;

            //2.然后获取处理掉一个“/” 后的 第一个“/”的位置是 : 6  （前面就是组名）
            int index = path.indexOf("/");

            //3.根据第一个“/”的位置截取group名 : group1
            String groupName = path.substring(0,index);//第0位开启截取6
            System.out.println("groupName:   "+groupName);

            //4.根据第一个“/”的位置截取后面的内容作为fileName : M00/00/01/wKgLb15RsNWAHucaAACBNnMr71A671.zip
            String fileName  = path.substring(index+1);// 不要前面的那个斜杠
            System.out.println("fileName:   "+fileName);

            return FastDfsApiOpr.download(groupName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    /**文件上传  和SpringMVC 哪里差不多MultipartFile
     *  但是 以前是 处理文件名之后 把文件写到磁盘（/webapp/upload。。。） 把路径存数据库
     *
     *  现在不同！！ （上传到文件的服务器了！）
     *
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public AjaxResult upload(MultipartFile file){
        try {
            /**
             * 准备工作：文件名
             * 执行上传的时候 考虑到文件名后缀不能写死 （通过获得原生文件名，截取后缀 即准备的变量：extName）
             * 所以：利用一个工具commons-io（专门截取后缀的）
             * commons-io：准备依赖
             */

            /*//获得后缀
            //获得原生文件名：
            String filename = file.getOriginalFilename();
            //利用工具commons-io截取
            String extName = FilenameUtils.getExtension(filename);*/
            //获得后缀 之优化代码：
            String extName = FilenameUtils.getExtension(file.getOriginalFilename());

            //文件上传到文件的服务器 （通过准备的工具类）（工具中可以得到路径，这里接收了路径）
            String filePath = FastDfsApiOpr.upload(file.getBytes(), extName);
            //成功   返回结果（返回上传文件的路径）
            return AjaxResult.me().setResultObj(filePath);

        } catch (IOException e) {
            e.printStackTrace();
            //失败 返回一下
            return AjaxResult.me().setSuccess(false).setMessage("文件上传失败");
        }
    }

    //文件上传（htm'l）  接口写好了别忘了feign
    @PostMapping("/uploadBytes")
    public AjaxResult uploadBytes(@RequestBody byte[]  file, @RequestParam("extName") String extName){
        //把文件上传到Fastdfs云服务器
        try {
            String filePath = FastDfsApiOpr.upload(file , extName);
            return AjaxResult.me().setResultObj(filePath);
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("文件上传失败");
        }
    }
    /*
    * String groupName,String fileName
    * */
//    @PostMapping("/remove")
//    public AjaxResult remove(MultipartFile file){
//        String originalFilename = file.getOriginalFilename();
//        FastDfsApiOpr.delete();
//        return AjaxResult.me().setSuccess(true).setMessage("文件删除成功");
//    }
}
